package com.ziyia.recyclerview;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.jetbrains.annotations.NotNull;
import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    /**
     * 声明一个接口，用于实现点击事件，由外部实现，内部调用
     */
    public interface OnRecyclerViewClickListener {
        // 点击事件
        void onRecyclerViewClick(int position);
    }

    // 上方接口的实例
    private OnRecyclerViewClickListener onRecyclerViewClickListener;

    /**
     * 提供给外部用于绑定的方法
     * @param onRecyclerViewClickListener
     */
    public void setOnRecyclerViewClickListener(OnRecyclerViewClickListener onRecyclerViewClickListener) {
        this.onRecyclerViewClickListener = onRecyclerViewClickListener;
    }

    // 实体类数据
    private List<Bean> list;
    // 一些字符串数据
    private String[] arr1;
    // 上下文对象
    private Context context;

    // 设置 实体类数据、上下文对象
    public MyAdapter(List<Bean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    // 设置 字符串数据 上下文对象
    public MyAdapter(String[] arr1, Context context) {
        this.arr1 = arr1;
        this.context = context;
    }

    /**
     * 创建条目控件对象。如TextView/ImageView...
     * @param parent 还不知道
     * @param viewType 也不知道
     * @return
     */
    @NonNull
    @org.jetbrains.annotations.NotNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull @org.jetbrains.annotations.NotNull ViewGroup parent, int viewType) {
        // 获取条目样式，
        View view = View.inflate(context, android.R.layout.simple_list_item_1, null);
        // 创建条目控件容器，把条目样式对象传递给控件容器
        return new MyViewHolder(view);
    }

    /**
     * 给控件绑定数据
     * @param holder 控件对象，可以通过该对象拿到条目中的某一个控件
     * @param position 第几条数据
     */
    @Override
    public void onBindViewHolder(@NonNull @org.jetbrains.annotations.NotNull MyAdapter.MyViewHolder holder, int position) {
//        holder.text.setText(list.get(position).getText());
        holder.text.setText(this.arr1[position]);
    }

    /**
     * 获取总条目，该返回值影响列表的总条目，例如：如果返回10，列表只会看到10条数据
     * @return 如果没有数据则返回0，否则返回条目总数
     */
    @Override
    public int getItemCount() {
//        return list == null ? 0 : list.size();
        return arr1 == null ? 0 : arr1.length;
    }

    /**
     * 条目控件容器，用于保存创建的控件对象
     */
    public class MyViewHolder extends RecyclerView.ViewHolder{
        // 条目样式中的文本
        private TextView text;

        public MyViewHolder(@NonNull @NotNull View itemView) {
            super(itemView);
            // 获取文本控件对象
            text = itemView.findViewById(android.R.id.text1);
            // 为文本控件对象设置点击事件
            text.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 如果我们点击事件的接口被外部实现了
                    if (onRecyclerViewClickListener != null) {
                        // 调用我们外部已经实现的接口
                        onRecyclerViewClickListener.onRecyclerViewClick(getAdapterPosition());
                    }
                }
            });
        }
    }
}
